home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok57 / borders / borders.mod < prev    next >
Text File  |  1993-11-04  |  4KB  |  114 lines

  1. (**********************************************************************
  2.  
  3.     :Program.    Borders.mod
  4.     :Contents.   support of "3D-design" rectangle borders
  5.     :Author.     Nicolas Benezan [bne]
  6.     :Address.    Postwiesenstr. 2, D7000 Stuttgart 60
  7.     :Phone.      711/333679
  8.     :Author.     Kai Bolay [kai]
  9.     :Copyright.  (c) 1990 by Nicolas Benezan. All rights reserved.
  10.     :Language.   Oberon
  11.     :Translator. Amiga Oberon Compiler V1.16 [fbs]
  12.     :History.    V1.0 [bne] 03.Oct.1990
  13.     :History.    v1.1 [kai] 15-Nov-90 (bugs fixed)
  14.  
  15. **********************************************************************)
  16.  
  17. MODULE Borders;
  18.  
  19. IMPORT e: Exec, i: Intuition, g: Graphics, s: SYSTEM;
  20.  
  21. TYPE
  22.   Angle = ARRAY 10 OF INTEGER;
  23.   Rect  = ARRAY 16 OF INTEGER;
  24.  
  25.   Border3D* = STRUCT
  26.     left* : i.Border;
  27.     right*: i.Border;
  28.     inner*: i.Border;
  29.     lAngle: Angle;
  30.     rAngle: Angle;
  31.     rect: Rect;
  32.   END;
  33.   Border3DPtr* = POINTER TO Border3D;
  34.  
  35. CONST
  36.   ThickX* = 4;
  37.   ThickY* = 2;
  38.  
  39.   LeftAngle  = Angle ( 0,  0,  0, -1,  1, -2,  1,  0, -2,  0);
  40.   RightAngle = Angle ( 1, -1, -2, -1, -2,  1, -1,  0, -1, -1);
  41.   Rectangle  = Rect  ( 2,  1,  2, -2, -3, -2, -3,  1,  3,  1,
  42.                        3, -2, -4, -2, -4,  2);
  43.  
  44. PROCEDURE ResizeBorder* (VAR Border: Border3D;
  45.                              Width, Height: INTEGER);
  46.   BEGIN
  47.     Border.lAngle:= LeftAngle;
  48.     Border.rAngle:= RightAngle;
  49.     Border.rect  := Rectangle;
  50.     INC (Border.lAngle[8], Width);
  51.     INC (Border.lAngle[3], Height);
  52.     INC (Border.lAngle[5], Height);
  53.     INC (Border.rAngle[2], Width);
  54.     INC (Border.rAngle[4], Width);
  55.     INC (Border.rAngle[6], Width);
  56.     INC (Border.rAngle[8], Width);
  57.     INC (Border.rAngle[1], Height);
  58.     INC (Border.rAngle[3], Height);
  59.     INC (Border.rAngle[9], Height);
  60.     INC (Border.rect[4] , Width);
  61.     INC (Border.rect[6] , Width);
  62.     INC (Border.rect[12], Width);
  63.     INC (Border.rect[14], Width);
  64.     INC (Border.rect[3] , Height);
  65.     INC (Border.rect[5] , Height);
  66.     INC (Border.rect[11], Height);
  67.     INC (Border.rect[13], Height);
  68.   END ResizeBorder;
  69.  
  70. PROCEDURE MoveBorder* (VAR Border: Border3D;
  71.                            OffsetX, OffsetY: INTEGER);
  72.   BEGIN
  73.     Border.left.leftEdge := OffsetX;
  74.     Border.left.topEdge  := OffsetY;
  75.     Border.right.leftEdge:= OffsetX;
  76.     Border.right.topEdge := OffsetY;
  77.     Border.inner.leftEdge:= OffsetX;
  78.     Border.inner.topEdge := OffsetY;
  79.   END MoveBorder;
  80.  
  81. PROCEDURE InitBorder* (VAR Border: Border3D;
  82.                            LTPen, RBPen, BackFill: SHORTINT;
  83.                            Width, Height: INTEGER): i.BorderPtr;
  84.   BEGIN
  85.     Border.left. leftEdge := 0;
  86.     Border.right.leftEdge:= 0;
  87.     Border.inner.leftEdge:= 0;
  88.     Border.left. topEdge := 0;
  89.     Border.right.topEdge:= 0;
  90.     Border.inner.topEdge:= 0;
  91.     Border.left. drawMode := g.jam1;
  92.     Border.right.drawMode:= g.jam1;
  93.     Border.inner.drawMode:= g.jam1;
  94.     Border.left. frontPen := LTPen;
  95.     Border.right.frontPen:= RBPen;
  96.     Border.inner.frontPen:= BackFill;
  97.     Border.left.backPen := 0;
  98.     Border.right.backPen:= 0;
  99.     Border.inner.backPen:= 0;
  100.     Border.left.count    := 5;
  101.     Border.right.count   := 5;
  102.     Border.inner.count   := 8;
  103.     Border.left.xy       := s.ADR (Border.lAngle);
  104.     Border.right.xy      := s.ADR (Border.rAngle);
  105.     Border.inner.xy      := s.ADR (Border.rect);
  106.     Border.right.nextBorder:= s.ADR (Border.inner);
  107.     Border.left.nextBorder:= s.ADR (Border.right);
  108.     Border.inner.nextBorder := NIL;
  109.     ResizeBorder (Border, Width, Height);
  110.     RETURN s.ADR (Border)
  111.   END InitBorder;
  112.  
  113. END Borders.
  114.